package com.imooc.spring.convert;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.UUID;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.support.converter.MessageConversionException;
import org.springframework.amqp.support.converter.MessageConverter;

/**
 * 我们在进行发送消息的时候，正常情况下消息体为二进制的数据方式进行传输，如果希望内部帮我们进行转换，
 * 或者指定自定义的转换器，就需要用到MessageConverter;
 * 自定义常用转换器：MessageConverter,一般来讲都需要实现这个接口
 * 重写下面两个方法：
 * toMessage:java对象转换为Message
 * fromMessage:Message对象转换为java对象
 *
 *	已经实现好的MessageConverter消息转换器：
 * Json转换器：Jackson2JsonMessageConverter:可以进行java对象的转换功能；
 * DefaultJackson2JavaTypeMapper映射器：可以进行java对象的映射关系；
 * 自定义二进制转换器：比如图片类型、PDF、PPT、流媒体等
 */
public class ImageMessageConverter implements MessageConverter {

	@Override
	public Message toMessage(Object object, MessageProperties messageProperties) throws MessageConversionException {
		throw new MessageConversionException(" convert error ! ");
	}

	@Override
	public Object fromMessage(Message message) throws MessageConversionException {
		System.err.println("-----------Image MessageConverter----------");
		
		Object _extName = message.getMessageProperties().getHeaders().get("extName");
		String extName = _extName == null ? "png" : _extName.toString();
		
		byte[] body = message.getBody();
		String fileName = UUID.randomUUID().toString();
		String path = "d:/010_test/" + fileName + "." + extName;
		File f = new File(path);
		try {
			Files.copy(new ByteArrayInputStream(body), f.toPath());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return f;
	}

}
